package config

import (
	"encoding/json"
	"os"
)

// SSHConfig SSH连接配置
type SSHConfig struct {
	Enable     bool   `json:"enable"`                // 是否启用SSH连接
	Host       string `json:"host"`                  // SSH服务器地址
	Port       int    `json:"port"`                  // SSH端口，默认22
	User       string `json:"user"`                  // SSH用户名
	Password   string `json:"password,omitempty"`    // SSH密码
	PrivateKey string `json:"private_key,omitempty"` // 私钥文件路径
	Passphrase string `json:"passphrase,omitempty"`  // 私钥密码
	LocalPort  int    `json:"local_port,omitempty"`  // 本地转发端口，0表示自动分配
	KeepAlive  bool   `json:"keep_alive"`            // 启用keepalive，默认true
	// 零拷贝和性能优化选项
	TCPNoDelay     bool `json:"tcp_no_delay"`     // 禁用Nagle算法，默认true
	SendBufferSize int  `json:"send_buffer_size"` // 发送缓冲区大小(KB)，0使用系统默认
	RecvBufferSize int  `json:"recv_buffer_size"` // 接收缓冲区大小(KB)，0使用系统默认
}

type Config struct {
	Enable               bool     `json:"enable"`
	DatabaseType         string   `json:"database_type,omitempty"` // "mysql" or "bigquery"
	Host                 string   `json:"host,omitempty"`
	Port                 int      `json:"port,omitempty"`
	User                 string   `json:"user,omitempty"`
	Password             string   `json:"password,omitempty"`
	Database             string   `json:"database"` // For BQ: GCP Project where data resides. For MySQL: DB name.
	WorkDir              string   `json:"work_dir"`
	IncludeTablePatterns []string `json:"include_table_patterns,omitempty"`
	ExcludeTablePatterns []string `json:"exclude_table_patterns,omitempty"`
	ReadOnlyMode         bool     `json:"readonly_mode,omitempty"`
	LazyMode             bool     `json:"lazy_mode,omitempty"` // Skip table structure initialization
	// Optional name of this configuration; used as log file prefix.
	Name string `json:"name,omitempty"`
	// New: directory to store SQL execution logs
	LogDir string `json:"log_dir,omitempty"`
	// BigQuery specific fields
	ProjectID       string   `json:"project_id,omitempty"` // For BQ: GCP Project for Authentication & Billing
	Dataset         string   `json:"dataset,omitempty"`    // 保留用于向后兼容
	Datasets        []string `json:"datasets,omitempty"`   // 新增，用于支持多数据集
	CredentialsFile string   `json:"credentials_file,omitempty"`
	// Proxy configuration (for BigQuery)
	ProxyURL string `json:"proxy_url,omitempty"` // HTTP/HTTPS代理地址，格式: http://host:port 或 socks5://host:port
	// SSH配置
	SSH *SSHConfig `json:"ssh,omitempty"` // SSH连接配置
}

func LoadConfig(path string) ([]Config, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}

	var configs []Config
	err = json.Unmarshal(data, &configs)
	if err != nil {
		return nil, err
	}

	return configs, nil
}
